﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using PanasonicWarranty.Business;
using Utils;
using System.Web.Services;
using System.Data;
using Settings;

namespace PanasonicWarranty.UI.ManageWarranty
{
    public partial class AgencyManagement : BasePageManageWarranty
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindDataGrid();
                LoadComboSource();
            }
        }

        void BindDataGrid()
        {
            grvData.DataSource = pa_Agency.GetByFullTextSearch(txtSearchAgency.Text.Trim());
            grvData.DataBind();   
        }

        void LoadComboSource()
        {
            ddlParentID.Items.Clear();
            ddlParentID.Items.Add(new ListItem("----------", ""));
            foreach (var item in pa_Agency.GetAll())
            {
                ddlParentID.Items.Add(new ListItem(item.AgencyName.ShowNameLevel(item.Level), item.AgencyID.ToString()));
            }
        }

        protected void lbtnAddNew_Click(object sender, EventArgs e)
        {
            try
            {
                ControlClass.ResetControlValues(dialogPanel);
                hdfObjectId.Value = 0.ToString();
                RegisterStartUpScript("OpenDialog('dialog-form',400);");
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }

        protected void grvData_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                int ID = Convert.ToInt32(e.CommandArgument);
                switch (e.CommandName)
                {
                    case "AddChild":
                        ControlClass.ResetControlValues(dialogPanel);
                        hdfObjectId.Value = 0.ToString();
                        pa_Agency childObj = new pa_Agency();
                        ddlParentID.SelectedValue = ID.ToString();
                        RegisterStartUpScript("OpenDialog('dialog-form',400);");
                        break;
                    case "Editing":
                        pa_Agency obj = DB.pa_Agencies.FirstOrDefault(p => p.AgencyID == ID);
                        if (obj != null)
                        {
                            hdfObjectId.Value = obj.AgencyID.ToString();
                            txtName.Text = obj.AgencyName;
                            txtAddres.Text = obj.Address;
                            txtPhone.Text = obj.GetPhoneNumber();
                            ddlParentID.SelectedValue = obj.ParentID is int ? obj.ParentID.Value.ToString() : "";
                            txtOrd.Text = obj.Ord != null ? obj.Ord.ToString() : "";
                            chkDisable.Checked = obj.Disabled is bool ? obj.Disabled.Value : false;
                            chkFullControl.Checked = obj.FullControl;
                        }
                        RegisterStartUpScript("OpenDialog('dialog-form',400);");
                        break;
                    case "Deleting":
                        Authorize(Role.Write);
                        pa_Agency.Delete(ID);
                        //Ghi log dữ liệu
                        InsertChangeLog("Xóa dữ liệu thông tin đại lý");
                        BindDataGrid();
                        LoadComboSource();
                        break;
                }
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }

        protected void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                Authorize(Role.Write);
                int id = 0;
                int.TryParse(hdfObjectId.Value, out id);
                pa_Agency obj = new pa_Agency();
                if (id > 0)
                {
                    obj = DB.pa_Agencies.FirstOrDefault(p => p.AgencyID == id);
                }
                obj.AgencyName = txtName.Text.Trim();
                obj.Address = txtAddres.Text;
                int parentID = 0;
                int.TryParse(ddlParentID.SelectedValue.Trim(), out parentID);
                obj.ParentID = parentID > 0 ? parentID : (int?)null;
                int ord = 0;
                int.TryParse(txtOrd.Text.Trim(), out ord);
                if (ord == 0)
                    ord = 1;
                obj.Ord = ord;
                obj.Disabled = chkDisable.Checked;
                obj.FullControl = chkFullControl.Checked;

                if (ValidateInfo(obj))
                {
                    if (id == 0)
                        DB.pa_Agencies.InsertOnSubmit(obj);
                    DB.SubmitChanges();
                    obj.SavePhoneNumber(txtPhone.Text.Trim());
                    //Ghi log dữ liệu
                    InsertChangeLog(id > 0 ? "Sửa dữ liệu thông tin đại lý" : "Thêm dữ liệu thông tin đại lý");
                    BindDataGrid();
                    LoadComboSource();
                }
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }

        protected override bool ValidateInfo(object obj)
        {
            string errMsg = string.Empty;
            pa_Agency obj1 = (pa_Agency)obj;
            if (obj1.ParentID == obj1.AgencyID)
            {
                errMsg += "Không thể là cha của chính nó.\\n";
            }
            if (string.IsNullOrWhiteSpace(obj1.AgencyName))
            {
                errMsg += "Bắt buộc nhập Tên.\\n";
            }      
            if (errMsg.Length > 0)
            {
                RegisterStartUpScript(string.Format("OpenDialog('dialog-form',400); jAlert('{0}');", errMsg));
                return false;
            }
            return true;
        }

        protected void btnSearch_Click(object sender, EventArgs e)
        {
            BindDataGrid();
        }

        protected void btnExport_Click(object sender, EventArgs e)
        {
            try
            {
                Authorize(Role.Export);
                using (DataTable dt = pa_Agency.GetDataExport())
                {
                    if (dt.Rows.Count > 0)
                    {
                        //Transform table
                        foreach (DataColumn col in dt.Columns)
                        {
                            col.Caption = pa_Agency.GetCaption(col.ColumnName);
                        }
                        ExportToExcel(dt, "ExportDaiLy.xlsx");
                    }
                    else
                    {
                        ShowMessageBox("Không có dữ liệu export");
                    }
                }
                InsertChangeLog("Export dữ liệu thông tin đại lý");
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }

        protected void btnDownload_Click(object sender, EventArgs e)
        {
            try
            {
                Authorize(Role.Download);
                DownloadFile_Tracking(Server.MapPath(string.Format(@"~/App_Data/{0}", AppSetting.PatternFileImportAgency)));
                InsertChangeLog("Download mẫu file upload danh sách đại lý");
            }
            catch (Exception ex)
            {
                ShowMessageBox(ex.Message);
            }
        }

        protected void btnCancel_Click(object sender, EventArgs e)
        {
            BindDataGrid();
        }

        [WebMethod]
        public static void SetFullControl(bool check, int agencyId)
        {
            System.Threading.Thread.Sleep(200);
            if (SAuthorize(Role.Write))
            {
                pa_Agency.SetFullControl(check, agencyId);
                SInsertChangeLog("Sửa dữ liệu thông tin đại lý");
            }
            else
                throw new CustomException("Bạn không có quyền thực hiện chức năng này");
        }
    }
}